跳到主要内容

Rust 在 linux 上 profile 的方法

· 阅读需 3 分钟

本文将介绍如何使用 perf 和 flamegraph 工具来分析 Rust 程序的性能瓶颈。

环境准备

首先,我们需要安装必要的工具。不同的 Linux 发行版可能需要不同的安装命令:

安装性能分析工具 perf

对于 Debian 系统(包括 x86 和 ARM 架构),运行:

sudo apt install -y linux-perf

而在 Ubuntu 系统(x86 架构)上,使用:

sudo apt install linux-tools-common linux-tools-generic linux-tools-`uname -r`

安装 Flamegraph

Flamegraph 提供了方便的 Rust 集成工具。使用 cargo 安装:

cargo install flamegraph

配置系统权限

为了让 perf 能够正常收集性能数据,需要调整内核的安全设置。运行以下命令:

echo 0 | sudo tee /proc/sys/kernel/kptr_restrict
echo 0 | sudo tee /proc/sys/kernel/perf_event_paranoid

这些命令降低了系统的安全限制,允许性能分析工具访问必要的内核数据。在生产环境中要谨慎使用这些设置。

性能分析实战

基础用法

最简单的使用方式是直接在项目目录下运行:

RUSTFLAGS='-g' cargo flamegraph

这里的 RUSTFLAGS='-g' 确保编译时包含调试信息,这对于生成详细的性能报告很重要。

高级配置

cargo-flamegraph 提供了多个命令行参数来满足不同的分析需求:

RUSTFLAGS='-g' cargo flamegraph \
--bin <binary_exec> \
--image-width <image_width> \
-- ...

其中:

  • --bin 指定要分析的可执行文件
  • --image-width 设置生成的火焰图宽度
  • -- 后面可以传递程序本身的参数

分析结果

性能分析会生成两个重要文件:

  1. flamegraph.svg:可视化的火焰图
  2. perf.data:原始性能数据

如果需要更详细的性能报告,可以使用 perf report 命令:

perf report -i perf.data --stdio > output.txt

这将生成一个包含详细性能统计的文本文件,包括每个函数的调用次数、执行时间等信息。